package com.rabbit.fanoutdemo.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FanoutConfig {

    public static final String FANOUT_QUEUE="fanout_queue";
    public static final String FANOUT_EXCHANGE="fanout_exchange";

    /**
     * 创建队列
     */
    @Bean
    public Queue queue01(){
        //                      队列名             是否持久化     是否独占          是都自动删除
        return new Queue(FANOUT_QUEUE+"_01",false,false,true);
    }

    @Bean
    public Queue queue02(){
        //还可以有跟多属性，详情见源码 ， 此处只是多展示一种创建方式 ， nonDurable为非持久化，持久化用这个durable（）
//        return QueueBuilder.nonDurable(FANOUT_QUEUE+"_02").autoDelete().exclusive().build();
        return QueueBuilder.nonDurable(FANOUT_QUEUE+"_02").autoDelete().build();
    }

    /**
     * 创建的交换机
     * 注意返回类型 ， fanout是扇形交换机，但是其他类型的交换机也能实现扇形发送消息但是没必要还麻烦
     */
    @Bean
    public FanoutExchange fanoutExchange(){
        //同理队列，建造者模式也可以在后面加很多属性
        return ExchangeBuilder.fanoutExchange(FANOUT_EXCHANGE).autoDelete().build();
    }

    /**
     * 绑定关系，绑定
     */
    @Bean
    public Binding fanout01(){
        return BindingBuilder.bind(queue01()).to(fanoutExchange());
    }
    @Bean
    public Binding fanout02(){
        return BindingBuilder.bind(queue02()).to(fanoutExchange());
    }
}
